'''
kind：普通位置参数，必须提供

*arguments：收集所有额外的位置参数到一个元组中

**keywords：收集所有额外的关键字参数到一个字典中

*name 必须在 **name 前面
'''
def cheeseshop(kind, *arguments, **keywords):
    print("-- Do you have any", kind, "?")
    print("-- I'm sorry, we're all out of", kind)
    for arg in arguments:
        # 遍历并打印所有传入的额外位置参数。
        print(arg)
    print("-" * 40)
    for kw in keywords:
        # 遍历并打印所有传入的关键字参数及其对应的值
        print(kw, ":", keywords[kw])

cheeseshop("Limburger", "It's very runny, sir.",
           "It's really very, VERY runny, sir.",
           shopkeeper="Michael Palin",
           client="John Cleese",
           sketch="Cheese Shop Sketch")

'''
Python 按照严格的顺序规则来分配参数：

先分配普通位置参数

然后分配可变位置参数 (*args)

最后分配可变关键字参数 (**kwargs)
'''

"""
步骤1：分配普通位置参数
函数定义：def cheeseshop(kind, *arguments, **keywords):

第一个参数 "Cheddar" 分配给 kind

步骤2：分配可变位置参数 (*arguments)
接下来所有没有名字的、纯值的参数都被收集到 *arguments

"Argument 1" 和 "Argument 2" → 分配给 arguments 元组

步骤3：分配可变关键字参数 (**keywords)
所有带名字的参数（名字=值 形式）都被收集到 **keywords

key1="value1" 和 key2="value2" → 分配给 keywords 字典


"""